/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 6; tab-width: 6 -*-  */
/*
 * preferenze.h
 * Copyright (C) 2014 Massimiliano <max.maniscalco@gmail.com>
 *
 * liberacus is free software: you can redistribute it and/or modify it
 * under the terms of the GNU General Public License as published by the
 * Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 * 
 * liberacus is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 * See the GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License along
 * with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

#ifndef _PREFERENZE_H_
#define _PREFERENZE_H_

#include <gtkmm.h>
#include <iostream>
#include "utility.h"

using namespace std;

class Preferenze
{
public:
	inline Preferenze() : intestazione_ricevuta ( Glib::ustring("") ), saluto_ricevuta ( Glib::ustring ( "" ) ), eliminazione_ricevute ( 0 ), azzeramento_numero ( 0 ), salvataggio_automatico ( true ),
						stampa_numero_ricevuta ( true ), visualizza_numero_ricevuta ( true )
	{}
	inline Preferenze& operator=( const Preferenze &pref );
	inline bool operator<( const Preferenze &pref ) const;
	inline bool operator==( const Preferenze &pref ) const;
	inline void set_intestazione_ricevuta ( const Glib::ustring &str ) { intestazione_ricevuta.assign(str); }
	inline void set_saluto_ricevuta ( const Glib::ustring &str ) { saluto_ricevuta.assign(str); }
	inline void set_eliminazione_ricevute ( char val ) { eliminazione_ricevute = val; }
	inline void set_eliminazione_ricevute ( const Glib::ustring& str );
	inline void set_azzeramento_numero ( char val ) { azzeramento_numero = val; }
	inline void set_azzeramento_numero ( const Glib::ustring& str );
	inline void set_salvataggio_automatico ( bool flag ) { salvataggio_automatico = flag; }
	inline void set_salvataggio_automatico ( const Glib::ustring& str );
	inline void set_stampa_numero_ricevuta ( bool flag ) { stampa_numero_ricevuta = flag; }
	inline void set_stampa_numero_ricevuta ( const Glib::ustring& str );
	inline void set_visualizza_numero_ricevuta ( bool flag ) { visualizza_numero_ricevuta = flag; }
	inline void set_visualizza_numero_ricevuta ( const Glib::ustring& str );
	inline Glib::ustring get_intestazione_ricevuta ( void ) const { return intestazione_ricevuta; }
	inline Glib::ustring get_xml_friendly_intestazione_ricevuta ( void ) const { return msu::get_xml_friendly_string (intestazione_ricevuta); }
	inline Glib::ustring get_saluto_ricevuta ( void ) const { return saluto_ricevuta; }
	inline Glib::ustring get_xml_friendly_saluto_ricevuta ( void ) const { return msu::get_xml_friendly_string (saluto_ricevuta); }
	inline char get_eliminazione_ricevute ( void ) const { return eliminazione_ricevute; }
	inline char get_azzeramento_numero ( void ) const { return azzeramento_numero; }
	inline bool get_salvataggio_automatico ( void ) const { return salvataggio_automatico; }
	inline bool get_stampa_numero_ricevuta ( void ) const { return stampa_numero_ricevuta; }
	inline bool get_visualizza_numero_ricevuta ( void ) const { return visualizza_numero_ricevuta; }
	inline Glib::ustring get_xml_string ( void ) const;
	
protected:

private:
	Glib::ustring intestazione_ricevuta;
	Glib::ustring saluto_ricevuta;
	char eliminazione_ricevute;
	char azzeramento_numero;
	bool salvataggio_automatico;
	bool stampa_numero_ricevuta;
	bool visualizza_numero_ricevuta;

};

inline Preferenze& Preferenze::
operator=( const Preferenze &pref )
{
	if ( this != &pref )
	{
		intestazione_ricevuta = pref.intestazione_ricevuta;
		saluto_ricevuta = pref.saluto_ricevuta;
		eliminazione_ricevute = pref.eliminazione_ricevute;
		azzeramento_numero = pref.azzeramento_numero;
		salvataggio_automatico = pref.salvataggio_automatico;
		stampa_numero_ricevuta = pref.stampa_numero_ricevuta;
		visualizza_numero_ricevuta = pref.visualizza_numero_ricevuta;
	}
	return *this;
}

inline bool Preferenze::
operator<( const Preferenze &pref ) const
{
	if ( intestazione_ricevuta.raw () < pref.intestazione_ricevuta.raw () )
		return true;
	else if ( intestazione_ricevuta.raw () == pref.intestazione_ricevuta.raw () && saluto_ricevuta.raw() < pref.saluto_ricevuta.raw() )
		return true;
	else
		return false;
}

inline bool Preferenze::
operator==( const Preferenze &pref ) const
{
	if ( intestazione_ricevuta.raw () == pref.intestazione_ricevuta.raw () && saluto_ricevuta.raw() == pref.saluto_ricevuta.raw() )
		return true;
	else
		return false;
}

inline void Preferenze::
set_eliminazione_ricevute ( const Glib::ustring& str )
{
	if ( str == Glib::ustring("mai") )
		eliminazione_ricevute = 0;
	else if ( str == Glib::ustring("giornaliera") )
		eliminazione_ricevute = 1;
	else if ( str == Glib::ustring("settimanale") )
		eliminazione_ricevute = 2;
	else if ( str == Glib::ustring("mensile") )
		eliminazione_ricevute = 3;
	else if ( str == Glib::ustring("annuale") )
		eliminazione_ricevute = 4;
}

inline void Preferenze::
set_azzeramento_numero ( const Glib::ustring& str )
{
	if ( str == Glib::ustring("giornaliero") )
		azzeramento_numero = 0;
	if ( str == Glib::ustring("settimanale") )
		azzeramento_numero = 1;
	if ( str == Glib::ustring("mensile") )
		azzeramento_numero = 2;
	if ( str == Glib::ustring("annuale") )
		azzeramento_numero = 3;
}

inline void Preferenze::
set_salvataggio_automatico ( const Glib::ustring& str )
{
	if ( str == Glib::ustring("automatico") )
		salvataggio_automatico = 0;
	if ( str == Glib::ustring("chiedi") )
		salvataggio_automatico = 1;
}

inline void Preferenze::
set_stampa_numero_ricevuta ( const Glib::ustring& str )
{
	if ( str == Glib::ustring("si") )
		stampa_numero_ricevuta = true;
	if ( str == Glib::ustring("no") )
		stampa_numero_ricevuta = false;
}

inline void Preferenze::
set_visualizza_numero_ricevuta ( const Glib::ustring& str )
{
	if ( str == Glib::ustring("si") )
		visualizza_numero_ricevuta = true;
	if ( str == Glib::ustring("no") )
		visualizza_numero_ricevuta = false;
}

inline Glib::ustring Preferenze::
get_xml_string ( void ) const
{
	Glib::ustring xmlstr, str;
	xmlstr.append( Glib::ustring("<intestazione>") + msu::get_xml_friendly_string(intestazione_ricevuta) + Glib::ustring("</intestazione>\n"));
	xmlstr.append( Glib::ustring("<saluto>") + msu::get_xml_friendly_string(saluto_ricevuta) + Glib::ustring("</saluto>\n"));
	switch (eliminazione_ricevute)
	{
		case 0:
			str.assign("mai");
			break;
		case 1:
			str.assign("giornaliera");
			break;
		case 2:
			str.assign("settimanale");
			break;
		case 3:
			str.assign("mensile");
			break;
		case 4:
			str.assign("annuale");
			break;
	}
	xmlstr.append( Glib::ustring("<eliminazione>") + str + Glib::ustring("</eliminazione>\n"));
	switch (azzeramento_numero)
	{
		case 0:
			str.assign("giornaliero");
			break;
		case 1:
			str.assign("settimanale");
			break;
		case 2:
			str.assign("mensile");
			break;
		case 3:
			str.assign("annuale");
			break;
	}
	xmlstr.append( Glib::ustring("<azzeramento>") + str + Glib::ustring("</azzeramento>\n"));
	switch (salvataggio_automatico)
	{
		case 0:
			str.assign("automatico");
			break;
		case 1:
			str.assign("chiedi");
			break;
	}
	xmlstr.append( Glib::ustring("<salvataggio_uscita>") + str + Glib::ustring("</salvataggio_uscita>\n"));
	switch (stampa_numero_ricevuta)
	{
		case true:
			str.assign("si");
			break;
		case false:
			str.assign("no");
			break;
	}
	xmlstr.append( Glib::ustring("<stampa_numero>") + str + Glib::ustring("</stampa_numero>\n"));
	switch (visualizza_numero_ricevuta)
	{
		case true:
			str.assign("si");
			break;
		case false:
			str.assign("no");
			break;
	}
	xmlstr.append( Glib::ustring("<visualizza_numero>") + str + Glib::ustring("</visualizza_numero>\n"));
	return xmlstr;
}

#endif // _PREFERENZE_H_

